Ext.namespace("Hroze");
Ext.namespace("Ext.ux");
/**
 * 分页工具条
 * @class Hroze.PageBar 分页工具条
 * @extends Ext.util.Observable
 */
Hroze.PageBar = Ext.extend(Ext.util.Observable, {
	/**
	 * 每页数量
	 * 
	 * @type Number
	 */
	pageSize : 10,
	/**
	 * 请求服务器时携带的翻页参数
	 * 
	 * @type Object
	 */
	params : {
		start : 0,
		limit : this.pageSize
	},
	/**
	 * 共有页码
	 * 
	 * @type Number
	 */
	totalPage : 0,
	/**
	 * 当前页面索引
	 * 
	 * @type Number
	 */
	curIndex : 0,
	/**
	 * 当前分页工具条的页码
	 * 
	 * @type Number
	 */
	pageBarIndex : 0,
	/**
	 * 分页工具条显示模板
	 * 
	 * @type Ext.Template
	 */
	pageTpl : new Ext.Template('共 {size} 条，当前第 {curIndex} 页，共 {totalPage} 页，  <a class="yin" href="#">首页</a> 第 <a class="yin" href="#">《</a> {pageIndex} <a class="yin" href="#">》</a> 页 <a class="yin" href="#">末页</a>'),
	/**
	 * 页码链接模板
	 * 
	 * @type Ext.Template
	 */
	aTpl : new Ext.Template('<a class="yin" href="#">[{pageIndex}]</a>'),
	/**
	 * 构造方法
	 * 
	 * @param {mixed}
	 *            element 用于显示工具条的元素
	 * @param {Object}
	 *            config 配置参数
	 */
	constructor : function(element, config) {
		Ext.apply(this, config);
		Hroze.PageBar.superclass.constructor.call(this);
		this.addEvents('onload');
		this.el = Ext.get(element);
		this.init();
	},
	/**
	 * 注册鼠标点击事件
	 */
	init : function() {
		this.el.on("click", this.onclick, this, {
					delegate : 'a'
				});
	},
	/**
	 * 翻页时间
	 * 
	 * @param {Event}
	 *            e 事件
	 * @param {HTMLElement}
	 *            t 被点击的页码
	 */
	onclick : function(e, t) {
		e.preventDefault();
		switch (t.innerHTML) {
			case '《' :
				this.prev();
				break;
			case '》' :
				this.next();
				break;
			case '首页' :
				this.first();
				break;
			case '末页' :
				this.last();
				break;
			default :
				this.select(t);
				break;
		}

	},
	/**
	 * 上一页
	 */
	prev : function() {
		if (this.curIndex > 0) {
			this.update(this.curIndex);
		}
	},
	/**
	 * 下一页
	 */
	next : function() {
		if (this.curIndex < this.totalPage - 1) {
			this.update(this.curIndex + 2);
		}
	},
	/**
	 * 首页
	 */
	first : function() {
		this.update(1);
	},
	/**
	 * 末页
	 */
	last : function() {
		this.update(this.totalPage);
	},
	/**
	 * 选择页码
	 * 
	 * @param {HTMLElement}
	 *            t 被选择的页码连接
	 */
	select : function(t) {
		var a = '';
		a = t.innerHTML;
		try {
			var a = Ext.decode(a);
			this.update(a[0]);
		} catch (e) {

		}
	},
	/**
	 * 执行翻页操作
	 * 
	 * @param {number}
	 *            index 页码索引
	 */
	update : function(index) {
		this.params.start = (index - 1) * this.pageSize;
		this.curIndex = index - 1;
		this.load();
	},
	/**
	 * 从服务器载入数据
	 * @param {object} cfg 参数
	 */
	load : function(cfg) {
		if(cfg.url){
		this.url=cfg.url;
		}
		if (cfg.params) {
			this.reConfig();
			Ext.apply(this.params,cfg.params);
		}
		Hroze.util.request({
					url : this.url,
					params : this.params,
					success : this.onload,
					scope : this
				});
	},
	/**
	 * 数据载入处理方式
	 * 
	 * @param {String} text 原始内容
	 * @param {Object}  result 服务器返回的数据
	 * @param {boolean} isJSON 数据库返回的是否是Json数据
	 *
	 */
	onload : function(text, result, isJSON) {
		this.fireEvent("onload", text, result, isJSON,this);
		this.data = result;
		this.render();
	},
	/**
	 * 重新配置工具条
	 */
	reConfig : function() {
		this.params = {
			start : 0,
			limit : this.pageSize
		}
	},
	/**
	 * 显示分页工具条
	 */
	render : function() {
		if (this.data.size > 0) {
			this.totalPage = Math.floor(this.data.size / this.pageSize) + 1;
			this.pageBarIndex = Math.floor(this.curIndex / 10);
			var aTags = "";
			for (var i = this.pageBarIndex * 10; i < (this.pageBarIndex + 1)
					* 10
					&& i < this.totalPage; i++) {
				aTags += this.aTpl.apply({
							pageIndex : i + 1
						});
			}

			this.pageTpl.overwrite(this.el, {
						totalPage : this.totalPage,
						curIndex : this.curIndex + 1,
						size : this.data.size,
						pageIndex : aTags
					});
		} else {
			this.el.update("");
			this.totalPage = 0;
			this.curIndex = 0;
			this.pageBarIndex = 0;
		}
	}
});
Ext.ux.PageBar=Hroze.PageBar;
var $PageBar=Hroze.PageBar;